#!user/bin/env python3
# -- coding: utf-8 --
# 一个步骤一个步骤叫面向过程编程
# 对一整个类进行封装叫面向对象编程
# 面向对象三个步：1.创建类；2.创建对象；3.实例化对象
"""
定义类：类最基本作用就是封装代码。
class 类名( ):
        类变量
        实例属性
        实例方法
        ……..
注意：类名要符合标识符命名规则，同时遵循大驼峰命名习惯.一般类名用大写字母开头，函数名用小写字母开头，用于区分
"""


# 规范：
class 类名称():  # 类名称要大写 --------1.创建类
    姓名 = '刘罗锅'  # 类变量
    年龄 = 63  # 类变量

    def __init__(self, name, age):  # __init__( )方法的作用：初始化对象
        # self指的是调用该函数的对象  【self = 对象名】
        # 由于打印对象名和打印self得到的内存地址相同，所以self指的是调用该函数的对象
        # 一个类可以创建多个对象，但是，self地址不相同，因为不同的对象存储的地址不一样
        # 对象名1 = 类名()
        # 对象名2 = 类名()
        """
        创建实例属性，也叫实例变量(可以有，也可以没有)
        :param name:
        :param age:
        """
        self.name = name
        self.age = age

    def 实例方法(self, job, *args):  # 函数要小写
        print(f'我的名字叫{self.name},今年{self.age}岁,职业是{job},爱好{args}')
        print(f'你的名字是{self.姓名}')
        print(f'你的年龄是{self.年龄}')


对象1 = 类名称('张三', '34')  # -----------------2.创建对象；
对象1.实例方法('卖西瓜', '烫头', '抽烟')  # -------3.实例化对象
对象2 = 类名称
对象2.姓名
对象2.年龄


# 设计烤月饼的案例 定义类，初始化属性，被烤时间和添加调料的方法
class 月饼():

    # 定义月饼的一些实例属性
    def __init__(self):
        self.time = 0
        self.state = '生的'
        self.sensoning = []

    # 定义月饼的第一个实例方法：烘焙
    def 烘焙(self, time):
        # 烤的时间需要累加
        self.time = self.time + time
        # 总的时间得出状态
        if 0 < self.time < 3:
            self.state = '生的'
        elif 3 <= self.time < 5:
            self.state = '半生不熟'
        elif 5 <= self.time < 8:
            self.state = '熟的'
        else:
            self.state = '糊的'

    # 定义月饼的第二个实例方法：加料
    def 加调料(self, sensoning):
        self.sensoning.extend(sensoning)

    # 书写str的魔法方法，用于输出结果，也可以直接打印
    def __str__(self):
        return f'这批月饼烘焙时间是{self.time}分钟，添加了{self.sensoning}调料，现在的状态是{self.state}'


# 实例化对象
月饼1 = 月饼()
月饼1.烘焙(2)
月饼1.加调料(['蔓越莓', '蛋挞'])
print(月饼1)
# 过了一会再看看
月饼1.烘焙(4)
月饼1.加调料(['牛奶', '蛋液'])
print(月饼1)
